package com.app.sgd.controller.action;

import java.util.ArrayList;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.app.sgd.business.dao.SQLClienteDAO;
import com.app.sgd.business.facade.ClienteFacade;
import com.app.sgd.business.facade.VariablesFacade;
import com.app.sgd.manager.SGDDispatchAction;
import com.app.sgd.model.bean.Cliente;
import com.app.sgd.model.bean.EmpleadoCliente;
import com.app.sgd.util.Constants;
import com.app.sgd.util.SessionConstants;
import com.app.sgd.view.actionform.AdministracionClienteForm;
import com.app.sgd.view.vo.FiltroBusquedaVO;
 
public class AdministracionClienteAction extends SGDDispatchAction{
	private static Logger logger = Logger.getLogger(AdministracionClienteAction.class);
	
	public ActionForward busquedaCliente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			reset(form,request);
			VariablesFacade variablesFacade = new VariablesFacade();
			ArrayList lstTipoCliente = variablesFacade.getTipoCliente();
			request.getSession().setAttribute(SessionConstants.LISTA_TIPO_CLIENTE, lstTipoCliente);
			return mapping.findForward("busquedaCliente");
		}catch(Exception e){
			logger.error("[STD]: Error en busquedaCliente "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	public ActionForward siguiente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			if(request.getSession().getAttribute(SessionConstants.MANTENIMIENTO_CLIENTES) == null)
				return mapping.findForward("busquedaCliente");
			else
				return mapping.findForward("inicioClientes");
		}catch(Exception e){
			logger.error("[STD]: Error en siguiente "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	public ActionForward buscarCliente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			AdministracionClienteForm datos = (AdministracionClienteForm)form;
			datos.setCheckValuesClientes(new String[0]);
			
			ClienteFacade clienteFacade = new ClienteFacade();
			FiltroBusquedaVO filtroBusquedaVO = new FiltroBusquedaVO();
			filtroBusquedaVO.setCodTipoCliente(datos.getTipoCliente()==null?"0":datos.getTipoCliente());
			filtroBusquedaVO.setDescCliente(datos.getNombreCliente()==null?"":datos.getNombreCliente().toUpperCase());
			if(request.getSession().getAttribute(SessionConstants.MANTENIMIENTO_CLIENTES) == null)
				filtroBusquedaVO.setCodEstado(Constants.VALOR_DEFAULT_DOS);
			else
				filtroBusquedaVO.setCodEstado(Constants.VALOR_DEFAULT_CERO);
			
			ArrayList lstClientes = clienteFacade.filtrarClientes(filtroBusquedaVO);
			request.getSession().setAttribute(SessionConstants.LISTA_CLIENTES_MOSTRAR, lstClientes);
			
			ArrayList lstClientesDestino = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_CLIENTES_DESTINO);
			
			if(request.getSession().getAttribute(SessionConstants.MANTENIMIENTO_CLIENTES) == null)
				return mapping.findForward("busquedaCliente");
			else
				return mapping.findForward("inicioClientes");
		}catch(Exception e){
			logger.error("[STD]: Error en buscarCliente "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	public boolean existeClienteDestino(ArrayList lstClientesDestino, Cliente cliente){
		for(Iterator it=lstClientesDestino.iterator();it.hasNext();){
			Cliente cli =  (Cliente)it.next();
			if(cli.getCodigoCliente()==cliente.getCodigoCliente() && cli.getCodEmplCliente()==cliente.getCodEmplCliente() && cli.getApeEmplCliente()== cliente.getApeEmplCliente() )
				return true;
		}	
		return false;
	}
	
	public ActionForward adicionarCliente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
//			AdministracionClienteForm datos = (AdministracionClienteForm)form;
//			datos.setCheckValuesClientes(new String[0]);
			
			String index = request.getParameter("index");
//			ArrayList lstClientesDestinoNew = new ArrayList();
			ArrayList lstClientesDestino = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_CLIENTES_DESTINO);
			if(lstClientesDestino==null) lstClientesDestino = new ArrayList();
			
			ArrayList lstClientesDestinoMostrar = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_CLIENTES_MOSTRAR);
			Cliente clienteAnadir = (Cliente)lstClientesDestinoMostrar.get(Integer.parseInt(index));

			int ind = lstClientesDestino.size();
			if(!existeClienteDestino(lstClientesDestino,clienteAnadir)){
				clienteAnadir.setIndiceDestino(String.valueOf(ind++));
				lstClientesDestino.add(clienteAnadir);		
			}
			request.getSession().setAttribute(SessionConstants.LISTA_CLIENTES_DESTINO,lstClientesDestino);
			clienteAnadir.setIndice(index);
			
			return mapping.findForward("busquedaCliente");
		}catch(Exception e){
			logger.error("[STD]: Error en adicionarCliente "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	public ActionForward eliminarCliente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			AdministracionClienteForm datos = (AdministracionClienteForm)form;
//			datos.setCheckValuesClientes(new String[0]);
			
			String index = request.getParameter("index");
			String total = request.getParameter("total");
			ArrayList lstClientesDestinoNew = new ArrayList();
			ArrayList lstClientesDestino = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_CLIENTES_DESTINO);
			if(lstClientesDestino==null) lstClientesDestino = new ArrayList();
			Cliente clienteEliminar = (Cliente)((ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_CLIENTES_MOSTRAR)).get(Integer.parseInt(index));
			
			int ind=0;
			for(int i=0;i<lstClientesDestino.size();i++){
				Cliente cliente = (Cliente)lstClientesDestino.get(i);
				if(!(clienteEliminar.getCodigoCliente()==cliente.getCodigoCliente() && clienteEliminar.getCodEmplCliente()==cliente.getCodEmplCliente())){
					cliente.setIndiceDestino(String.valueOf(ind++));
					lstClientesDestinoNew.add(cliente);
				}
			}
			
			if(total.equals(Constants.VALOR_DEFAULT_CERO))
				datos.setCheckValuesClientes(new String[0]);
			request.getSession().setAttribute(SessionConstants.LISTA_CLIENTES_DESTINO,lstClientesDestinoNew);
			return mapping.findForward("busquedaCliente");
		}catch(Exception e){
			logger.error("[STD]: Error en eliminarCliente "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	public ActionForward confirmarClientesDestino(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			AdministracionClienteForm datos = (AdministracionClienteForm)form;
			datos.setCheckValuesClientes(new String[0]);
			String sel[] = datos.getCheckValuesClientesConfirmar();
			
			ArrayList lstClientesDestinoNew = new ArrayList();
			ArrayList lstClientesDestino = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_CLIENTES_DESTINO);
			if(lstClientesDestino==null) lstClientesDestino = new ArrayList();
			
			if(sel==null){
				datos.setFlgSeleccionSalida("0");
				return mapping.findForward("busquedaCliente");
			}

			for(int i=0;i<sel.length;i++){
				lstClientesDestinoNew.add(lstClientesDestino.get(Integer.parseInt(sel[i])));
			}
			
			request.getSession().setAttribute(SessionConstants.LISTA_CLIENTES_DESTINO,lstClientesDestinoNew);
			datos.setFlgSeleccionSalida("1");
			return mapping.findForward("busquedaCliente");
		}catch(Exception e){
			logger.error("[STD]: Error en confirmarClientesDestino "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	public ActionForward seleccionarCliente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			AdministracionClienteForm datos = (AdministracionClienteForm)form;
			String index = request.getParameter("index");
			
			ArrayList lstClientes = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_CLIENTES_MOSTRAR);
			Cliente cliente = (Cliente) lstClientes.get(Integer.parseInt(index));
			
			datos.setFlgSeleccion("1");
			datos.setCodigoClienteSel(cliente.getCodigoCliente());
			datos.setNombreClienteSel(cliente.getRazonSocial());
			datos.setDireccionClienteSel(cliente.getDireccion());
			datos.setTipoClienteSel(cliente.getDescTipoCliente());
			datos.setCodigoEmpleadoSel(cliente.getCodEmplCliente());
			datos.setNombreEmpleadoSel((cliente.getDescEmplCliente()+" "+cliente.getApeEmplCliente()).trim());
			datos.setCargoEmpleadoSel(cliente.getCargoEmplCliente());
			
			return mapping.findForward("busquedaCliente");
		}catch(Exception e){
			logger.error("[STD]: Error en seleccionarCliente "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	public void reset(ActionForm form,HttpServletRequest request){
		AdministracionClienteForm datos = (AdministracionClienteForm)form;
		datos.setCodCliente(Constants.VALOR_DEFAULT_CERO);
		datos.setTipoCliente(new String());
		datos.setNombreCliente(new String());
		datos.setSeleccionado(new String());
		datos.setCheckValuesClientes(new String[0]);
		datos.setFlgSeleccion(new String());
		datos.setFlgSeleccionSalida(new String());
		datos.setCodigoClienteSel(new String());
		datos.setNombreClienteSel(new String());
		datos.setTipoClienteSel(new String());
		datos.setCodigoEmpleadoSel(new String());
		datos.setNombreEmpleadoSel(new String());
		datos.setLstClientes(new ArrayList());
		datos.setFlgSalir(Constants.VALOR_DEFAULT_CERO);
		datos.setCheckValuesEmpCli(new String());
		request.getSession().removeAttribute(SessionConstants.LISTA_CLIENTES_DESTINO);
		request.getSession().removeAttribute(SessionConstants.LISTA_CLIENTES_MOSTRAR);
		request.getSession().removeAttribute(SessionConstants.MANTENIMIENTO_CLIENTES);
	}
	
	public void resetNuevoCliente(ActionForm form,HttpServletRequest request){
		AdministracionClienteForm datos = (AdministracionClienteForm)form;
		datos.setFlgSalir(Constants.VALOR_DEFAULT_CERO);
		datos.setCheckValuesEmpCli(new String());
		
		datos.setCodCliente(Constants.VALOR_DEFAULT_CERO);
		datos.setDescCliente(new String());
		datos.setCodPais(Constants.VALOR_DEFAULT_CERO);
		datos.setCodRubro(Constants.VALOR_DEFAULT_CERO);
		datos.setCodDpto(Constants.VALOR_DEFAULT_CERO);
		datos.setNumRuc(new String());
		datos.setCodProv(Constants.VALOR_DEFAULT_CERO);
		datos.setCodAmbito(new String());
		datos.setCodDistrito(Constants.VALOR_DEFAULT_CERO);
		datos.setDescRepresentante(new String());
		datos.setDireccionCliente(new String());
		datos.setTelefonoCliente(new String());
		datos.setEmailCliente(new String());
		datos.setCodTipoPersona(new String());
		datos.setNombreCortoCliente(new String());
		datos.setCodTipoCliente(new String());
		datos.setCodEPS(new String());
		datos.setCodTipoDoc(new String());
		datos.setCodEstado(new String());
		datos.setNumDocumento(new String());
		datos.setLstEmpleados(new ArrayList());
		
		datos.setCodigoEmpleado(Constants.VALOR_DEFAULT_CERO);
		datos.setNombreEmpleado(new String());
		datos.setApellidoEmpleado(new String());
		datos.setDescCargoEmpleado(new String());
		datos.setCodTipoDocEmpleado(new String());
		datos.setNumDocumentoEmpleado(new String());
		
		request.getSession().removeAttribute(SessionConstants.LISTA_ESTADO_REGISTRO);
		request.getSession().removeAttribute(SessionConstants.LISTA_AMBITO);
		request.getSession().removeAttribute(SessionConstants.LISTA_PAIS);
		request.getSession().removeAttribute(SessionConstants.LISTA_DEPARTAMENTO);
		request.getSession().removeAttribute(SessionConstants.LISTA_PROVINCIA);
		request.getSession().removeAttribute(SessionConstants.LISTA_DISTRITO);
		request.getSession().removeAttribute(SessionConstants.LISTA_RUBRO);
		request.getSession().removeAttribute(SessionConstants.LISTA_TIPO_PERSONA);
		request.getSession().removeAttribute(SessionConstants.LISTA_EPS);
		request.getSession().removeAttribute(SessionConstants.LISTA_DOC_IDENTIDAD);
	}
	
	public ActionForward nuevoCliente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			resetNuevoCliente(form,request);
			VariablesFacade variablesFacade = new VariablesFacade();
			
			ArrayList lstTipoCliente = variablesFacade.getTipoCliente();
			request.getSession().setAttribute(SessionConstants.LISTA_TIPO_CLIENTE, lstTipoCliente);
			
			ArrayList lstEstadoRegistro = variablesFacade.getEstadoRegistro();
			request.getSession().setAttribute(SessionConstants.LISTA_ESTADO_REGISTRO, lstEstadoRegistro);
			
			ArrayList lstAmbito = variablesFacade.getAmbito();
			request.getSession().setAttribute(SessionConstants.LISTA_AMBITO, lstAmbito);
			
			ArrayList lstPais = variablesFacade.getPais();
			request.getSession().setAttribute(SessionConstants.LISTA_PAIS, lstPais);
			
			ArrayList lstDepartamento = variablesFacade.getDepartamento(Constants.VALOR_DEFAULT_CERO);
			request.getSession().setAttribute(SessionConstants.LISTA_DEPARTAMENTO, lstDepartamento);
			
			ArrayList lstProvincia = variablesFacade.getProvincia(Constants.VALOR_DEFAULT_CERO);
			request.getSession().setAttribute(SessionConstants.LISTA_PROVINCIA, lstProvincia);
			
			ArrayList lstDistrito = variablesFacade.getDistrito(Constants.VALOR_DEFAULT_CERO);
			request.getSession().setAttribute(SessionConstants.LISTA_DISTRITO, lstDistrito);
			
			ArrayList lstRubro = variablesFacade.getRubro();
			request.getSession().setAttribute(SessionConstants.LISTA_RUBRO, lstRubro);
			
			ArrayList lstTipoPersona = variablesFacade.getTipoPersona();
			request.getSession().setAttribute(SessionConstants.LISTA_TIPO_PERSONA, lstTipoPersona);
			
			ArrayList lstEPS = variablesFacade.getEPS();
			request.getSession().setAttribute(SessionConstants.LISTA_EPS, lstEPS);
			
			ArrayList lstDocIdentidad = variablesFacade.getDocIdentidad();
			request.getSession().setAttribute(SessionConstants.LISTA_DOC_IDENTIDAD, lstDocIdentidad);
			
			if(request.getSession().getAttribute(SessionConstants.MANTENIMIENTO_CLIENTES) == null)
				return mapping.findForward("edicionCliente");
			else
				return mapping.findForward("mantEdicionCliente");
		}catch(Exception e){
			logger.error("[STD]: Error en nuevoCliente "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	public ActionForward editarCliente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			resetNuevoCliente(form, request);
			VariablesFacade variablesFacade = new VariablesFacade();
			AdministracionClienteForm datos = (AdministracionClienteForm)form;
			datos.setFlgSalir(Constants.VALOR_DEFAULT_CERO);
			
			String index = request.getParameter("index");
			ArrayList lstClientes = (ArrayList)request.getSession().getAttribute(SessionConstants.LISTA_CLIENTES_MOSTRAR);
			Cliente cliente = (Cliente) lstClientes.get(Integer.parseInt(index));
			
			datos.setCodCliente(cliente.getCodigoCliente());
			datos.setDescCliente(cliente.getRazonSocial());
			datos.setCodRubro(cliente.getCodTipoRubro());
			datos.setNumRuc(cliente.getNumRuc());
			datos.setCodAmbito(cliente.getCodAmbito());
			datos.setDescRepresentante(cliente.getNombreRepresentante());
			datos.setTelefonoCliente(cliente.getNumTelefono());
			datos.setCodTipoPersona(cliente.getCodTipo());
			datos.setCodTipoCliente(cliente.getCodTipoCliente());
			datos.setCodTipoDoc(cliente.getCodTipDoc());
			datos.setNumDocumento(cliente.getNumDoc());
			datos.setCodPais(cliente.getCodPais());
			datos.setCodDpto(cliente.getCodDpto());
			datos.setCodProv(cliente.getCodProv());
			datos.setCodDistrito(cliente.getCodDist());
			datos.setDireccionCliente(cliente.getDireccion());
			datos.setEmailCliente(cliente.getEmail());
			datos.setNombreCortoCliente(cliente.getNombre());
			datos.setCodEPS(cliente.getCodEPS());
			datos.setCodEstado(cliente.getCodEstado());
			
			SQLClienteDAO sqlClienteDAO = new SQLClienteDAO();
			ArrayList lstEmpleadosCliente = sqlClienteDAO.listarEmpleadosCliente(datos.getCodCliente());
			datos.setLstEmpleados(lstEmpleadosCliente);
			
			ArrayList lstTipoCliente = variablesFacade.getTipoCliente();
			request.getSession().setAttribute(SessionConstants.LISTA_TIPO_CLIENTE, lstTipoCliente);
			
			ArrayList lstEstadoRegistro = variablesFacade.getEstadoRegistro();
			request.getSession().setAttribute(SessionConstants.LISTA_ESTADO_REGISTRO, lstEstadoRegistro);
			
			ArrayList lstAmbito = variablesFacade.getAmbito();
			request.getSession().setAttribute(SessionConstants.LISTA_AMBITO, lstAmbito);
			
			ArrayList lstPais = variablesFacade.getPais();
			request.getSession().setAttribute(SessionConstants.LISTA_PAIS, lstPais);
			
			ArrayList lstDepartamento = variablesFacade.getDepartamento(datos.getCodPais());
			request.getSession().setAttribute(SessionConstants.LISTA_DEPARTAMENTO, lstDepartamento);
			
			ArrayList lstProvincia = variablesFacade.getProvincia(datos.getCodDpto());
			request.getSession().setAttribute(SessionConstants.LISTA_PROVINCIA, lstProvincia);
			
			ArrayList lstDistrito = variablesFacade.getDistrito(datos.getCodProv());
			request.getSession().setAttribute(SessionConstants.LISTA_DISTRITO, lstDistrito);
			
			ArrayList lstRubro = variablesFacade.getRubro();
			request.getSession().setAttribute(SessionConstants.LISTA_RUBRO, lstRubro);
			
			ArrayList lstTipoPersona = variablesFacade.getTipoPersona();
			request.getSession().setAttribute(SessionConstants.LISTA_TIPO_PERSONA, lstTipoPersona);
			
			ArrayList lstEPS = variablesFacade.getEPS();
			request.getSession().setAttribute(SessionConstants.LISTA_EPS, lstEPS);
			
			ArrayList lstDocIdentidad = variablesFacade.getDocIdentidad();
			request.getSession().setAttribute(SessionConstants.LISTA_DOC_IDENTIDAD, lstDocIdentidad);

			if(request.getSession().getAttribute(SessionConstants.MANTENIMIENTO_CLIENTES) == null)
				return mapping.findForward("edicionCliente");
			else
				return mapping.findForward("mantEdicionCliente");
		}catch(Exception e){
			logger.error("[STD]: Error en editarCliente "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	public ActionForward cambiaUbigeo(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		AdministracionClienteForm datos = (AdministracionClienteForm)form;
		VariablesFacade variablesFacade = new VariablesFacade();
		
		ArrayList lstDepartamento = variablesFacade.getDepartamento(datos.getCodPais());
		request.getSession().setAttribute(SessionConstants.LISTA_DEPARTAMENTO, lstDepartamento);
		
		ArrayList lstProvincia = variablesFacade.getProvincia(datos.getCodDpto());
		request.getSession().setAttribute(SessionConstants.LISTA_PROVINCIA, lstProvincia);
		
		ArrayList lstDistrito = variablesFacade.getDistrito(datos.getCodProv());
		request.getSession().setAttribute(SessionConstants.LISTA_DISTRITO, lstDistrito);
		
		if(request.getSession().getAttribute(SessionConstants.MANTENIMIENTO_CLIENTES) == null)
			return mapping.findForward("edicionCliente");
		else
			return mapping.findForward("mantEdicionCliente");
	}
	
	public ActionForward actualizarCliente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			AdministracionClienteForm datos = (AdministracionClienteForm)form;
			Cliente cliente = new Cliente();
			cliente.setCodigoCliente(datos.getCodCliente());
			cliente.setRazonSocial(datos.getDescCliente());
			cliente.setCodTipoRubro(datos.getCodRubro());
			cliente.setNumRuc(datos.getNumRuc());
			cliente.setCodAmbito(datos.getCodAmbito());
			cliente.setNombreRepresentante(datos.getDescRepresentante());
			cliente.setNumTelefono(datos.getTelefonoCliente());
			cliente.setCodTipo(datos.getCodTipoPersona());
			cliente.setCodTipoCliente(datos.getCodTipoCliente());
			cliente.setCodTipDoc(datos.getCodTipoDoc());
			cliente.setNumDoc(datos.getNumDocumento());
			cliente.setCodPais(datos.getCodPais());
			cliente.setCodDpto(datos.getCodDpto());
			cliente.setCodProv(datos.getCodProv());
			cliente.setCodDist(datos.getCodDistrito());
			cliente.setDireccion(datos.getDireccionCliente());
			cliente.setEmail(datos.getEmailCliente());
			cliente.setNombre(datos.getNombreCortoCliente());
			cliente.setCodEPS(datos.getCodEPS());
			cliente.setCodEstado(datos.getCodEstado());
			cliente.setCodUbiDist(Constants.VALOR_DEFAULT_CERO);
			cliente.setCodUbiProv(Constants.VALOR_DEFAULT_CERO);
			
			FiltroBusquedaVO filtroBusquedaVO = new FiltroBusquedaVO();
			filtroBusquedaVO.setCliente(cliente);
			
			SQLClienteDAO sqlClienteDAO = new SQLClienteDAO();
			String codCliente = sqlClienteDAO.actualizarCliente(filtroBusquedaVO);
			datos.setCodCliente(codCliente);
		}catch(Exception e){
			logger.error("[STD]: Error en actualizarCliente "+e.getMessage());
			e.printStackTrace();
		}
		if(request.getSession().getAttribute(SessionConstants.MANTENIMIENTO_CLIENTES) == null)
			return mapping.findForward("edicionCliente");
		else
			return mapping.findForward("mantEdicionCliente");
	}
	
	public ActionForward grabarEmpleadoCliente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			AdministracionClienteForm datos = (AdministracionClienteForm)form;
			EmpleadoCliente empleadoCliente = new EmpleadoCliente();
			empleadoCliente.setCodigoEmpCli(datos.getCodigoEmpleado());
			empleadoCliente.setNombreEmpCli(datos.getNombreEmpleado());
			empleadoCliente.setApellidoEmpCli(datos.getApellidoEmpleado());
			empleadoCliente.setCargoEmpCli(datos.getDescCargoEmpleado());
			empleadoCliente.setTipoDocEmpCli(datos.getCodTipoDocEmpleado());
			empleadoCliente.setNumDocEmpCli(datos.getNumDocumentoEmpleado());
			empleadoCliente.setCodEstadoEmpCli(Constants.VALOR_DEFAULT_ACTIVO);
			
			FiltroBusquedaVO filtroBusquedaVO = new FiltroBusquedaVO();
			filtroBusquedaVO.setCodCliente(datos.getCodCliente());
			filtroBusquedaVO.setEmpleadoCliente(empleadoCliente);
			
			SQLClienteDAO sqlClienteDAO = new SQLClienteDAO();
			try{
				int res = sqlClienteDAO.registrarEmpleadoCliente(filtroBusquedaVO);
				datos.setNombreEmpleado(Constants.VALOR_DEFAULT_VACIO);
				datos.setApellidoEmpleado(Constants.VALOR_DEFAULT_VACIO);
				datos.setDescCargoEmpleado(Constants.VALOR_DEFAULT_VACIO);
				datos.setCodTipoDocEmpleado(Constants.VALOR_DEFAULT_CERO);
				datos.setNumDocumentoEmpleado(Constants.VALOR_DEFAULT_VACIO);
			}catch(Exception e){}
			
			ArrayList lstEmpleadosCliente = sqlClienteDAO.listarEmpleadosCliente(datos.getCodCliente());
			datos.setLstEmpleados(lstEmpleadosCliente);
			
		}catch(Exception e){
			logger.error("[STD]: Error en adicionarEmpleado "+e.getMessage());
			e.printStackTrace();
		}
		if(request.getSession().getAttribute(SessionConstants.MANTENIMIENTO_CLIENTES) == null)
			return mapping.findForward("edicionCliente");
		else
			return mapping.findForward("mantEdicionCliente");
	}
	
	public ActionForward salirMantClientes(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		if(request.getSession().getAttribute(SessionConstants.MANTENIMIENTO_CLIENTES) == null){
			AdministracionClienteForm datos = (AdministracionClienteForm)form;
			datos.setFlgSalir(Constants.VALOR_DEFAULT_UNO);
			return mapping.findForward("edicionCliente");
		}
		else
			return buscarCliente(mapping, form, request, response);
	}
	
	public ActionForward refrescarDocumentos(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		if(request.getSession().getAttribute(SessionConstants.MANTENIMIENTO_CLIENTES) == null)
			return mapping.findForward("busquedaCliente");
		else
			return mapping.findForward("inicioClientes");
	}
	
	public ActionForward eliminarEmpleadoCliente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			AdministracionClienteForm datos = (AdministracionClienteForm)form;
			
			String checkValuesOrigen = datos.getCheckValuesEmpCli();
			ArrayList lstEmpleadosCli = datos.getLstEmpleados();
			ArrayList lstEmpleadosCliElim = new ArrayList();
			for(int i=0;i<lstEmpleadosCli.size();i++){
				EmpleadoCliente empleadoCliente = (EmpleadoCliente)lstEmpleadosCli.get(i);
				if(checkValuesOrigen.indexOf("|"+i+"|") > -1){
					empleadoCliente.setCodEstadoEmpCli(Constants.VALOR_DEFAULT_INACTIVO);
					lstEmpleadosCliElim.add(empleadoCliente);
				}
			}
		
			SQLClienteDAO sqlClienteDAO = new SQLClienteDAO();
			try{
				for(Iterator it=lstEmpleadosCliElim.iterator();it.hasNext();){
					EmpleadoCliente empleadoCliente = (EmpleadoCliente)it.next();
					FiltroBusquedaVO filtroBusquedaVO = new FiltroBusquedaVO();
					filtroBusquedaVO.setCodCliente(datos.getCodCliente());
					filtroBusquedaVO.setEmpleadoCliente(empleadoCliente);
					int res = sqlClienteDAO.registrarEmpleadoCliente(filtroBusquedaVO);
				}
			}catch(Exception e){e.printStackTrace();}
			
			ArrayList lstEmpleadosCliente = sqlClienteDAO.listarEmpleadosCliente(datos.getCodCliente());
			datos.setLstEmpleados(lstEmpleadosCliente);
			
			if(request.getSession().getAttribute(SessionConstants.MANTENIMIENTO_CLIENTES) == null)
				return mapping.findForward("edicionCliente");
			else
				return mapping.findForward("mantEdicionCliente");
		}catch(Exception e){
			logger.error("[STD]: Error en eliminarEmpleadoCliente "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
	
	/****************************************************************************************************/
	
	public ActionForward inicioClientes(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) throws Exception {
		try{
			reset(form,request);
			VariablesFacade variablesFacade = new VariablesFacade();
			ArrayList lstTipoCliente = variablesFacade.getTipoCliente();
			request.getSession().setAttribute(SessionConstants.LISTA_TIPO_CLIENTE, lstTipoCliente);
			
			request.getSession().setAttribute(SessionConstants.MANTENIMIENTO_CLIENTES,Constants.VALOR_DEFAULT_UNO);
			
			return mapping.findForward("inicioClientes");
		}catch(Exception e){
			logger.error("[STD]: Error en inicioClientes "+e.getMessage());
			e.printStackTrace();
			return mapping.findForward("error");
		}
	}
}
